﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
using DiscoveryLogic.Analytics.DataObjects;
using DiscoveryLogic.Analytics.DataObjects.Visuals;

namespace DiscoveryLogic.Analytics.Modules.Diagrams.Renders
{
    public delegate void OnFinishedGraphRendering();

    public interface IGraphRenderer
    {
        event OnFinishedGraphRendering GraphRenderFinished;

        /// <summary>
        /// 
        /// </summary>
        bool IsStopped { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="vertices"></param>
        /// <param name="edges"></param>
        /// <param name="netVisual"></param>
        /// <param name="constraintRect"></param>
        /// <param name="iteration"></param>
        /// <param name="attractForceConst"></param>
        /// <param name="repellingForceConst"></param>
        void UpdatePositions(List<Vertice> vertices, List<Edge> edges,
            NetworkVisual netVisual, Rect constraintRect, int iteration, 
            double attractForceConst, double repellingForceConst);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="dc"></param>
        /// <param name="netVisual"></param>
        /// <param name="vertices"></param>
        /// <param name="edges"></param>
        void RenderEdges(
            DrawingContext dc, NetworkVisual netVisual,
            List<Vertice> vertices, List<Edge> edges);
    }
}
